/*!
 * \file Event.h
 * \brief Contains the definition of Event
 * \author CHOUVENC Guillaume, DE CHOULOT Guillaume, MATHIEU Fabien
 */

#ifndef EVENT_H
#define EVENT_H

//#include "bga/system/Object.h"
#include "bga/system/ConfigDLL.h"

/**
 * \namespace bga
 * \brief API namespace
 */
namespace bga
{

/*!
 * \brief Base class for all events
 *
 * This class stands for all Event class
 */
template< typename T >
class BOARD_HELL_ENGINE Event
{
    protected:
        //const bga::Window *Sender; ///<! Pointer to the window which have sent the event
        const T* sender;   ///!< Pointer to the object which have sent the event

    public:
        /*!
         * \brief Contructor
         *
         * Default Contructor
         */
        Event();

        /*!
         * \brief Contructor
         * \param sender : Window which have sent the event
         *
         * Contructor with the sender
         */
        Event(const T& sender);

        /*!
         * \brief Destructor
         */
        virtual ~Event();

        /*!
         * \brief Set the sender
         * \param sender : Window which have sent the event
         *
         * Set the window which have sent the event
         */
        void setSender(const T& sender);

        /*!
         * \brief Get the sender
         * \return the window which have sent the event
         *
         * Get the window which have sent the event
         */
        const T* getSender() const;
};

}

#include "bga/system/Event.inl"

#endif // EVENT_H

